home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / ada / ada_lrm3.zip / LR7VT.SRC < prev    next >
Text File  |  1989-03-30  |  52KB  |  1,512 lines

  1.  
  2. --                ON-LINE Ada LANGUAGE REFERENCE MANUAL
  3. --        Developed at Nofolk State University
  4. --        Development funded by a grant from the U. S. Army
  5. --        Project ReDTEA
  6. --        Version 1.0 released December 1988
  7. --        Programmer:        Esther M. Lumsdon
  8. --        Project Director:  George C. Harrison, PhD
  9.  
  10.  
  11.  
  12. with TEXT_IO; use TEXT_IO; 
  13. with MACHINE_SPECIFIC; use MACHINE_SPECIFIC; 
  14. with LRM_TYPES; use LRM_TYPES; 
  15. with LRM_GLOBAL; use LRM_GLOBAL; 
  16. with STARLET; use STARLET; 
  17. with SMG; use SMG; 
  18.  
  19. package LRM_SMG is 
  20.  
  21.  
  22.  
  23.   ANNEX_MENU_DISPLAY   : LONGWORD_UNSIGNED; 
  24.   CHAPTER_MENU_DISPLAY : LONGWORD_UNSIGNED; 
  25.   KB_ID                : LONGWORD_UNSIGNED; 
  26.   LEFT_MOST            : NATURAL; 
  27.   -- X coordinate of where to paste virtual displays
  28.   --  dependent on whether they have borders or not.
  29.   LIMITED_BORDERS      : BOOLEAN; 
  30.   -- true if user doesn't want border on every window.
  31.  
  32.   MAIN_MENU_CHOICE     : STRING(1 .. 4); 
  33.  
  34.   MAIN_MENU_DISPLAY    : LONGWORD_UNSIGNED; 
  35.   RESULTANT_FILE       : STRING(1 .. 10); 
  36.   SIZE_COLUMNS         : LONGWORD_SIGNED; 
  37.   SIZE_ROWS            : LONGWORD_SIGNED; 
  38.   -- # of rows and columns available on user's terminal
  39.   TERM_ID              : LONGWORD_UNSIGNED; 
  40.   -- id assigned to user's terminal (pasteboard)
  41.   TEXT_SCREEN_DISPLAY  : LONGWORD_UNSIGNED; 
  42.   TOP_MOST             : NATURAL; 
  43.   -- X coordinate of where to paste virtual displays
  44.   --  dependent on whether they have borders or not.
  45.   USING_DEC_TERMINAL   : BOOLEAN; 
  46.   -- true if using DEC or compatible terminal (capable of obeying SMG$
  47.   --   VAX VMS system calls); false otherwise.
  48.   VD_2_ID              : LONGWORD_UNSIGNED; 
  49.   -- prompt and error message box
  50.  
  51.  
  52.   procedure INITIALIZE; 
  53.  
  54.   procedure WELCOME(IN_FILE_NAME : in STRING); 
  55.  
  56.   procedure DISPLAY_EXPLAIN(IN_FILE_NAME : in STRING); 
  57.  
  58.   procedure DISPLAY_MAIN_MENU(IN_FILE_NAME : in STRING); 
  59.  
  60.   procedure SELECT_FROM_MAIN_MENU(MAIN_MENU_CHOICE : out STRING); 
  61.  
  62.   procedure SCROLL_TEXT(IN_FILE_NAME : in STRING; 
  63.                         SAVE_TITLE   : in STRING; 
  64.                         SAVE_FILE    : in out FILE_TYPE); 
  65.  
  66.   procedure DO_CHAPTER_MENU(SAVE_FILE : in out FILE_TYPE); 
  67.  
  68.   procedure DO_ANNEX_MENU(SAVE_FILE : in out FILE_TYPE); 
  69.  
  70.   procedure CREDITS(SAVE_FILE : in out FILE_TYPE); 
  71.  
  72.   procedure TERMINATE_LRM; 
  73.  
  74.  
  75. end LRM_SMG; 
  76.  
  77. -----------------------------------------------------------------
  78.  
  79. with TEXT_IO; use TEXT_IO; 
  80. with LRM_TYPES; use LRM_TYPES; 
  81. with LRM_GLOBAL; use LRM_GLOBAL; 
  82. with STARLET; use STARLET; 
  83. with SMG; use SMG; 
  84. with INT_IO; use INT_IO; 
  85.  
  86. package body LRM_SMG is 
  87.  
  88.  
  89.  
  90.  
  91.   procedure DISPLAY_MENU(IN_FILE_NAME : in STRING; 
  92.                          DISPLAY_ID   : in LONGWORD_UNSIGNED) is 
  93.  
  94.  
  95.  
  96.   -- read menu text from file, and put entire file on screen.
  97.  
  98.     EMPTY_STRING_80 : STRING(1 .. 80); 
  99.     LAST_CHAR       : NATURAL := 0; 
  100.     READ_IN_FILE    : FILE_TYPE; 
  101.     READ_IN_LINE    : STRING(1 .. 80); 
  102.  
  103.  
  104.   begin
  105.     for I in 1 .. 80 loop
  106.       EMPTY_STRING_80 := (others => ' '); 
  107.     end loop; 
  108.  
  109.     OPEN(READ_IN_FILE, IN_FILE, IN_FILE_NAME); 
  110.     while not END_OF_FILE(READ_IN_FILE) loop
  111.       READ_IN_LINE := EMPTY_STRING_80; 
  112.       GET_LINE(READ_IN_FILE, READ_IN_LINE, LAST_CHAR); 
  113.       PUT_LINE(DISPLAY_ID => DISPLAY_ID, TEXT => READ_IN_LINE); 
  114.     end loop; 
  115.  
  116.   end DISPLAY_MENU; 
  117.  
  118.  
  119. ------------------------------------------------------------------------------
  120.  
  121.  
  122.   procedure DISPLAY_CHAPTER_MENU(IN_FILE_NAME : in STRING) is 
  123.  
  124.  
  125.  
  126.   -- read menu text from file, and put entire file on screen.
  127.  
  128.     EMPTY_STRING_80 : STRING(1 .. 80); 
  129.     LAST_CHAR       : NATURAL := 0; 
  130.     READ_IN_FILE    : FILE_TYPE; 
  131.     READ_IN_LINE    : STRING(1 .. 80); 
  132.  
  133.  
  134.   begin
  135.     EMPTY_STRING_80 := (others => ' '); 
  136.  
  137.     OPEN(READ_IN_FILE, IN_FILE, IN_FILE_NAME); 
  138.     SET_CURSOR_ABS(CHAPTER_MENU_DISPLAY, 3, 1); 
  139.  
  140.     while not END_OF_FILE(READ_IN_FILE) loop
  141.       READ_IN_LINE := EMPTY_STRING_80; 
  142.       GET_LINE(READ_IN_FILE, READ_IN_LINE, LAST_CHAR); 
  143.       PUT_LINE(DISPLAY_ID => CHAPTER_MENU_DISPLAY, TEXT => READ_IN_LINE); 
  144.  
  145.     -- VMS 5.0  put_line (display_id => chapter_menu_display, text
  146.     --  => read_in_line, flags => smg$m_wrap_word);
  147.     end loop; 
  148.  
  149.   end DISPLAY_CHAPTER_MENU; 
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156. ------------------------------------------------------------------------------
  157.   procedure INITIALIZE is 
  158.  
  159.   --    Initialization for on-line Ada Language Reference Manual
  160.   --      using SMG$ virtual terminal driver
  161.   --
  162.   --
  163.   --LOGIC:
  164.   --
  165.   -- Decide terminal category
  166.   -- Prompt user for value of limited_borders
  167.   -- create pasteboard
  168.   -- create bordered box for prompts ( 1 rows x 78 columns @20,2), the
  169.   --     annex_menu_display, chapter_menu_display, main_menu_display;
  170.   --     most of these are 18 rows x 78 columns, paste @2,2. 
  171.   --     
  172.   -- create virtual keyboard for user input
  173.   -- attach virtual keyboard to user device
  174.   --
  175.  
  176.  
  177.     BORDER_CHOICE : CHARACTER := 'y'; 
  178.     OD            : CHAR_STRING(1 .. 10);  -- output device
  179.     PSF           : MASK_LONGWORD;  -- Preserve Screen Flag (in SMG$)
  180.  
  181.   ----------------------------------------------------------------------------
  182.     procedure DECIDE_TERM_CATEGORY(USING_DEC_TERMINAL : out BOOLEAN) is 
  183.  
  184.       CHOSE_TERMINAL_CATEGORY : BOOLEAN; 
  185.       TERM_CATEGORY           : CHARACTER; 
  186.  
  187.  
  188.     begin
  189.  
  190.       loop
  191.         CLS; 
  192.         PUT_LINE("  The following terminals are available for your use at NSU:")
  193.           ; 
  194.         PUT_LINE("Category A terminals:"); 
  195.         PUT_LINE("    VISUAL brand terminals"); 
  196.         PUT_LINE("    TeleVideo brand terminals"); 
  197.         PUT_LINE("    DEC terminals"); 
  198.         NEW_LINE; 
  199.         PUT_LINE("Category B terminals:"); 
  200.         PUT_LINE("    ADM brand terminals"); 
  201.         PUT_LINE("    Adds-Viewpoint terminals"); 
  202.         PUT_LINE("    Hazeltine brand terminals"); 
  203.         NEW_LINE(2); 
  204.         PUT(
  205.           "Please enter A or B for the category of terminal that you are using: "
  206.           ); 
  207.         GET(TERM_CATEGORY); 
  208.         CHOSE_TERMINAL_CATEGORY := TRUE; 
  209.         case TERM_CATEGORY is 
  210.           when 'A' | ASCII.LC_A => 
  211.             USING_DEC_TERMINAL := TRUE; 
  212.           when 'B' | ASCII.LC_B => 
  213.             USING_DEC_TERMINAL := FALSE; 
  214.           when others => 
  215.             CHOSE_TERMINAL_CATEGORY := FALSE; 
  216.         end case; 
  217.         exit when CHOSE_TERMINAL_CATEGORY; 
  218.       end loop; 
  219.  
  220.     end DECIDE_TERM_CATEGORY; 
  221.  
  222.     -----------------------------------------------------------------
  223.  
  224.   begin
  225.  
  226.     -- create annex_menu_display, chapter_menu_display, main_menu_display,
  227.     -- text_screen_display
  228.     CLS; 
  229.     USING_DEC_TERMINAL := TRUE; 
  230.     if USING_DEC_TERMINAL then 
  231.       NEW_LINE(2); 
  232.       PUT_LINE("Do you want windows with borders, or without borders?"); 
  233.       PUT(
  234.         "If you are accessing this system at slower than 4800 baud, your screen"
  235.         ); 
  236.       NEW_LINE; 
  237.       PUT_LINE("  will update much faster without borders."); 
  238.       NEW_LINE; 
  239.       PUT("Do you want borders (y/n) ? "); 
  240.       GET(BORDER_CHOICE); 
  241.       if (BORDER_CHOICE = 'n' or BORDER_CHOICE = 'N') then 
  242.         LIMITED_BORDERS := TRUE; 
  243.         SCREEN_HEIGHT := 19; 
  244.       else 
  245.         LIMITED_BORDERS := FALSE; 
  246.         SCREEN_WIDTH := SCREEN_WIDTH - 2; 
  247.         SCREEN_HEIGHT := 18; 
  248.       end if; 
  249.       OD := "SYS$OUTPUT"; 
  250.  
  251.       --  set psf=0
  252.       PSF := 0; 
  253.       CREATE_PASTEBOARD(TERM_ID, OD, SIZE_ROWS, SIZE_COLUMNS, PSF); 
  254.       CREATE_VIRTUAL_KEYBOARD(NEW_KEYBOARD_ID => KB_ID, RESULTANT_FILESPEC => 
  255.         RESULTANT_FILE); 
  256.       if LIMITED_BORDERS then 
  257.         TOP_MOST := 1; 
  258.         LEFT_MOST := 1; 
  259.       else 
  260.         TOP_MOST := 2; 
  261.         LEFT_MOST := 2; 
  262.       end if; 
  263.       if LIMITED_BORDERS then 
  264.         CREATE_VIRTUAL_DISPLAY(NUM_ROWS => 25, NUM_COLUMNS => 80, NEW_DISPLAY_ID
  265.           => CHAPTER_MENU_DISPLAY); 
  266.       else 
  267.         CREATE_VIRTUAL_DISPLAY(22, 78, CHAPTER_MENU_DISPLAY, SMG_M_BORDER); 
  268.       end if; 
  269.       if LIMITED_BORDERS then 
  270.         CREATE